home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 1992 August / info-mac-1992.iso / Applications (app) / Image 1.44 / Macros / Measurement Macros < prev    next >
Text File  |  1992-03-26  |  6KB  |  293 lines

  1. macro 'Count Particles at Random Locations';
  2. var
  3.   n,i,width,height,PicID,nLocations:integer;
  4.   size:real;
  5. begin
  6.   RequiresVersion(1.44);
  7.   nLocations:=10;
  8.   size:=0.25;
  9.   n:=1;
  10.   GetPicSize(width,height);
  11.   PicID:=PicNumber;
  12.   SetUser1Label('Count');
  13.   SetOptions('User1');
  14.   for i:=1 to nLocations do begin
  15.     SelectPic(PicID);
  16.     MakeRoi((1-size)*width*random,(1-size)*height*random,size*width,size*height);
  17.     Duplicate('Temp');;
  18.     SetDensitySlice(255,255);
  19.     AnalyzeParticles;
  20.     Dispose;
  21.     rUser1[i]:=rCount;
  22.   end;
  23.   KillRoi;
  24.   SetCounter(nLocations);
  25.   ShowResults;
  26. end;
  27.  
  28.  
  29. macro 'Make Circle from Line';
  30. var
  31.   x1,x2,y1,y2,top,left,width,height:integer;
  32.   xcenter,ycenter,radius:integer;
  33. begin
  34.   GetLine(x1,y1,x2,y2,width);
  35.   if x1<0 then begin
  36.     PutMessage('This macro requires a line selection.');
  37.     exit;
  38.   end;
  39.   xcenter:=x1+(x2-x1)/2;
  40.   ycenter:=y1+(y2-y1)/2;
  41.   radius:=sqrt(sqr(x2-x1)+sqr(y2-y1))/2;
  42.   MakeOvalROI(xcenter-radius,ycenter-radius,radius*2,radius*2);
  43. end;
  44.  
  45.  
  46. macro 'Display Calibration Table';
  47. {
  48. Stores 0-255(all possible gray values) in the User1 column
  49. and the 256 corresponding calibrated values in the User2 column.
  50. Max Measurements must be set to 256 or greater. Use the Export
  51. command to export the calibration table to a text file. The two
  52. columns will be identical if the image is not calibrated.
  53. }
  54. var
  55.   i:integer;
  56.   v:real;
  57. begin
  58.   RequiresVersion(1.44);
  59.   SetCounter(256);
  60.   SetUser1Label('value');
  61.   SetUser2Label('cvalue');
  62.   for i:=0 to 255 do begin
  63.     rUser1[i+1]:=i;
  64.     rUser2[i+1]:=cvalue(i);
  65.   end;
  66.   ShowResults;
  67. end;
  68.  
  69.  
  70. macro 'Measure and draw line [L]';
  71. var
  72.   x1,x2,y1,y2,width:integer;
  73. begin
  74.   GetLine(x1,y1,x2,y2,width);
  75.   if x1<0 then begin
  76.     PutMessage('This macro requires a line selection.');
  77.     exit;
  78.   end;
  79.   Measure;
  80.   Fill;
  81.   KillRoi;
  82. end;
  83.  
  84.  
  85. macro 'Measure All';
  86. {Measures all currently open images using the current selection. There is}
  87. {an implied "Select All" if the active image doesn't have a selection.}
  88. var
  89.   i,left,top,width,height:integer;
  90. begin
  91.   ResetCounters;
  92.   for i:=1 to nPics do begin
  93.     SelectPic(i);
  94.     RestoreROI;
  95.     Measure;
  96.   end;
  97. end;
  98.  
  99.  
  100. macro 'Measure All from Disk';
  101. {
  102. Reads from disk and measures a set of images too large to simultaneously
  103. fit in memory. The image names names must be in the form '01', '02', etc.
  104. Before starting, open and outline the first image('01').
  105. }
  106. var
  107.   i,width,height:integer;
  108. begin
  109.   GetPicSize(width,height);
  110.   if width=0 then begin
  111.     PutMessage('Before running this macro, open and outline the first image("01") in the series.');
  112.     exit;
  113.   end;
  114.   ResetCounters;
  115.   Measure;
  116.   close;
  117.   for i:=2 to 1000 do begin
  118.     open(i:2);
  119.     RestoreROI;
  120.     Measure;
  121.     close;
  122.   end;
  123. end;
  124.  
  125.  
  126. macro 'Paste Results [P]'
  127. {Use the Measure command, the ruler tool, or the pointing tool to}
  128. {make up to about 10 measurements, then use this macro to paste}
  129. {the results into the upper left corner of the window.}
  130. begin
  131.   SetFont('Monaco');
  132.   SetFontSize(9);
  133.   SetText('Plain; Align Left');
  134.   SetOption; {Copy headings}
  135.   CopyResults;
  136.   MakeRoi(-10,0,250,150);
  137.   Paste;
  138.   KillRoi;
  139.   ResetCounter;
  140. end;
  141.  
  142.  
  143. macro 'Measure Redirected and Label'
  144. begin
  145.   Redirect(true);
  146.   Measure;
  147.   Redirect(false);
  148.   MarkSelection;
  149.   RestoreRoi;
  150. end;
  151.  
  152.  
  153. macro 'Reset Measurement Options';
  154. {Resets the Options dialog box in the Analyze menu to the default settings.}
  155. begin
  156.   RequiresVersion(1.44);
  157.   SetOptions('Area; Mean');
  158.   Redirect(false);
  159.   LabelParticles(true);
  160.   OutlineParticles(false);
  161.   IgnoreParticlesTouchingEdge(false);
  162.   IncludeInteriorHoles(false);
  163.   WandAutoMeasure(false);
  164.   AdjustAreas(false);
  165.   SetParticleSize(1,999999);
  166.   SetPrecision(2);
  167. end;
  168.  
  169.  
  170. macro 'Set Threshold';
  171. var
  172.   lower,upper:integer;
  173. begin
  174.   lower:=GetNumber('Lower:',1);
  175.   upper:=GetNumber('Upper:',254);
  176.   SetDensitySlice(lower,upper);
  177. end;
  178.  
  179.  
  180. macro 'Measure Accumulated Perimeter[A]';
  181. {
  182. Measures perimeter and computes accumulated perimeter,
  183. storing it in the User1 column.
  184. }
  185. var
  186.   i:integer;
  187.   Total:real;
  188. begin
  189.   MeasurePerimeter(true);
  190.   SetOptions('Area; Mean; Perimeter; User1');
  191.   SetUser1Label('Total');
  192.   Measure;
  193.   Total:=0;
  194.   for i:=1 to rCount do Total:=Total+rLength[i];
  195.   rUser1[rCount]:=Total;
  196.   UpdateResults;
  197. end;
  198.  
  199.  
  200. macro 'Count Black and White Pixels [B]';
  201. {
  202. Counts the number of black and white pixels in the current
  203. selection and stores the counts in the User1 and User2 columns.
  204. }
  205. begin
  206.   RequiresVersion(1.44);
  207.   SetUser1Label('Black');
  208.   SetUser2Label('White');
  209.   Measure;
  210.   rUser1[rCount]:=histogram[255];
  211.   rUser2[rCount]:=histogram[0];
  212.   UpdateResults;
  213. end;
  214.  
  215.  
  216. macro 'Compute Average and Total Area [T]';
  217. {
  218. Computes average and accumulated area and stores 
  219. the them in the Major and Minor Axis columns.
  220. }
  221. var
  222.   i:integer;
  223.   sum:real;
  224. begin
  225.   RequiresVersion(1.44);
  226.   SetUser1Label('Avg');
  227.   SetUser2Label('Total');
  228.   SetOptions('Area; User1; User2');
  229.   Measure;
  230.   sum:=0;
  231.   for i:=1 to rCount do sum:=sum+rArea[i];
  232.   rUser1[rCount]:=sum/rCount;
  233.   rUser2[rCount]:=sum;
  234.   UpdateResults;
  235. end;
  236.  
  237.  
  238. macro 'Measure Circularity [C]';
  239. begin
  240.   SetUser1Label('Shape');
  241.   Measure;
  242.   rUser1[rCount]:=4*3.14159265*(rArea[rCount]/sqr(rLength[rCount]));
  243.   UpdateResults;
  244. end;
  245.  
  246.  
  247. macro 'Fit  Ellipse and Draw in White';
  248. var
  249.   left,top,width,height:real;
  250. begin
  251.   GetRoi(left,top,width,height);
  252.   if width=0 then begin
  253.     PutMessage('This macro requires a selection.');
  254.     exit;
  255.   end;
  256.   SetOptions('Area; Mean; X-Y Center');
  257.   Measure;
  258.   SetOption; MarkSelection;
  259.   KillRoi;
  260.   SelectAll;
  261.   KillRoi;
  262.  end;
  263.  
  264.  
  265. macro 'Draw XY Center';
  266. var
  267.   left,top,width,height,x,y:real;
  268. begin
  269.   RequiresVersion(1.44);
  270.   GetRoi(left,top,width,height);
  271.   if width=0 then begin
  272.     PutMessage('This macro requires a selection.');
  273.     exit;
  274.   end;
  275.   SaveState; {Invert Y status saved starting with V1.44b21}
  276.   InvertY(false);
  277.   SetForegroundColor(255); {black}
  278.   SetOptions('Area; Mean; X-Y Center'); {XY Center}
  279.   Measure;
  280.   KillRoi;
  281.   x:=rX[rCount];
  282.   y:=rY[rCount];
  283.   MoveTo(x-5,y);
  284.   LineTo(x+5,y);
  285.   MoveTo(x,y-5);
  286.   LineTo(x,y+5);
  287.   RestoreState;
  288. end;
  289.  
  290.  
  291.  
  292.  
  293.